package tliasmanagement.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.util.Date;
import java.util.Map;

public class JwtUtils {

    // 设置过期时间（毫秒），这里设置为1小时
    private static final long EXPIRE_TIME = 36000000;

    // 生成一个固定的密钥，用于签名JWT
    // 在实际生产环境中，应该将此密钥存储在安全的地方
    // private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256); // 随机生成密钥
    // 固定秘钥
    private static final SecretKey SECRET_KEY = Keys.hmacShaKeyFor(
            "tlias-management-system-secret-key-2024".getBytes()
    );


    /**
     * 生成JWT令牌
     * @param claims 要存储在令牌中的数据
     * @return 生成的JWT令牌
     */
    public static String generateJwt(Map<String, Object> claims) {
        return Jwts.builder()
                .setClaims(claims)
                .signWith(SECRET_KEY)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME))
                .compact();
    }

    /**
     * 解析JWT令牌
     * @param jwt JWT令牌字符串
     * @return 令牌中包含的声明数据
     */
    public static Claims parseJwt(String jwt) {
        return Jwts.parserBuilder()
                .setSigningKey(SECRET_KEY)
                .build()
                .parseClaimsJws(jwt)
                .getBody();
    }
}
